<?php
namespace app\common\middleware;

use \app\common\controller\Base;
use think\facade\Log;

/**
 * 数据验证中间件
 * Class Validate
 * @package app\store\middleware
 */
class Validate extends Base
{
    /**
     * 验证
     * @param $request
     * @param \Closure $next
     * @return mixed|void
     */
    public function handle($request, \Closure $next)
    {
        if ($request->isPost()) {
            // 获取当前参数
            $params = $request->param();
            // 应用名称
            $app_name = app('http')->getName();
            // 获取访问控制器
            $controller = ucfirst($request->controller());
            // 获取操作名,用于验证场景scene
            $scene = $request->action();
            // 拼接验证类名，注意路径不要出错
            $validate = 'app\\'.$app_name.'\\validate\\' . $controller;
            // 判断当前验证类是否存在
            if (class_exists($validate)) {
                $v = new $validate;
                // 仅当存在验证场景才校验
                if ($v->hasScene($scene) && !empty(input('_verify', true))) {
                    // 设置当前验证场景
                    $v->scene($scene);
                    if (!$v->check($params)) {
                        // 校验不通过则直接返回错误信息
                        $this->result('',-1,$v->getError());
                    }
                }
            }
        }
        return $next($request);
    }
}
